#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;
typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

void list_head_insert(LinkList &L)
{
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    ElemType x;
    scanf("%d",&x);
    LinkList s;  //s是用来指向申请的新节点
    while (x!=9999)
    {
        s=(LinkList)malloc(sizeof(LNode));
        s->data=x;
        s->next=L->next;
        L->next=s;
        scanf("%d",&x);
    }
}

void list_tail_insert(LinkList &L)
{
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    ElemType x;
    scanf("%d",&x);
    LinkList s,r=L;  //s是用来指向申请的新节点,r始终指向链表尾部
    while (x!=9999)
    {
        s=(LinkList)malloc(sizeof(LNode));
        s->data=x;
        r->next=s;
        r=s;
        scanf("%d",&x);
    }
    r->next=NULL; //结束时让尾指针的next指向NULL
}

void printf_list(LinkList L)
{
    L=L->next;
    while(L!=NULL)
    {
        printf("%d",L->data); //打印当前结点数据
        L=L->next;//指向下一个结点
        if(L!=NULL)
        {
            printf(" ");
        }
    }
    printf("\n");
}

// 3 4 5 6 7 9999
int main() {
    LinkList L;
    //头插法
    list_head_insert(L);
    printf_list(L);  //打印列表
    list_tail_insert(L);
    printf_list(L);  //打印列表
    return 0;
}
